﻿#ifndef FITKOCCMODELMETALFORMING_H
#define FITKOCCMODELMETALFORMING_H

#include "FITKAbstractOCCModel.h"
#include "FITK_Interface/FITKInterfaceGeometry/FITKAbsGeoModelUpDie.h"
#include "FITK_Interface/FITKInterfaceGeometry/FITKAbsGeoModelLowDie.h"
#include "FITK_Interface/FITKInterfaceGeometry/FITKAbsGeoModelSheet.h"
#include "FITK_Interface/FITKInterfaceGeometry/FITKAbsGeoModelTwoCoins.h"
#include "FITK_Interface/FITKInterfaceGeometry/FITKAbsGeoModelMidDie.h"
#ifndef PI
#define PI 3.14159265358979323846
#endif

namespace OCC
{
    /**
     * @brief 上模具
     * @author LiZiYang (1710087564@qq.com)
     * @date 2024-12-02
     */
    class FITKGeoCompOCCAPI FITKOCCModelUpDie : public Interface::FITKAbsGeoModelUpDie,
         public OCCShapeAgent
    {
    public:
        /**
         * @brief Construct a new FITKOCCModelUpDie object
         * @author LiZiYang (1710087564@qq.com)
         * @date 2024-12-02
         */
        explicit FITKOCCModelUpDie();
        /**
         * @brief Destroy the FITKOCCModelUpDie object
         * @author LiZiYang (1710087564@qq.com)
         * @date 2024-12-02
         */
        virtual ~FITKOCCModelUpDie() = default;
        /**
         * @brief 更新模型
         * @return true 更新成功
         * @return false 更新失败
         * @author LiZiYang (1710087564@qq.com)
         * @date 2024-12-02
         */
        virtual bool update() override;
    };

    /**
     * @brief 下模具
     * @author LiZiYang (1710087564@qq.com)
     * @date 2024-12-19
     */
    class FITKGeoCompOCCAPI FITKOCCModelLowDie : public Interface::FITKAbsGeoModelLowDie,
         public OCCShapeAgent
    {
    public:
        /**
         * @brief Construct a new FITKOCCModelLowDie object
         * @author LiZiYang (1710087564@qq.com)
         * @date 2024-12-19
         */
        explicit FITKOCCModelLowDie();
        /**
         * @brief Destroy the FITKOCCModelLowDie object
         * @author LiZiYang (1710087564@qq.com)
         * @date 2024-12-19
         */
        virtual ~FITKOCCModelLowDie() = default;
        /**
         * @brief 更新模型
         * @return true 更新成功
         * @return false 更新失败
         * @author LiZiYang (1710087564@qq.com)
         * @date 2024-12-19
         */
        virtual bool update() override;
    };

    /**
     * @brief 中圈
     * @author LiZiYang (1710087564@qq.com)
     * @date 2025-01-04
     */
    class FITKGeoCompOCCAPI FITKOCCModelMidDie : public Interface::FITKAbsGeoModelMidDie,
         public OCCShapeAgent
    {
    public:
        /**
         * @brief Construct a new FITKOCCModelLowDie object
         * @author LiZiYang (1710087564@qq.com)
         * @date 2024-12-19
         */
        explicit FITKOCCModelMidDie();
        /**
         * @brief Destroy the FITKOCCModelLowDie object
         * @author LiZiYang (1710087564@qq.com)
         * @date 2024-12-19
         */
        virtual ~FITKOCCModelMidDie() = default;
        /**
         * @brief 更新模型
         * @return true 更新成功
         * @return false 更新失败
         * @author LiZiYang (1710087564@qq.com)
         * @date 2024-12-19
         */
        virtual bool update() override;

        void getAxis();
    };
    /**
     * @brief 单色币坯饼
     * @author LiZiYang (1710087564@qq.com)
     * @date 2024-12-06
     */
    class FITKGeoCompOCCAPI FITKOCCModelSheet : public Interface::FITKAbsGeoModelSheet,
         public OCCShapeAgent
    {
    public:
        /**
         * @brief Construct a new FITKOCCModelUpDie object
         * @author LiZiYang (1710087564@qq.com)
         * @date 2024-12-02
         */
        explicit FITKOCCModelSheet();
        /**
         * @brief Destroy the FITKOCCModelUpDie object
         * @author LiZiYang (1710087564@qq.com)
         * @date 2024-12-02
         */
        virtual ~FITKOCCModelSheet() = default;
        /**
         * @brief 更新模型
         * @return true 更新成功
         * @return false 更新失败
         * @author LiZiYang (1710087564@qq.com)
         * @date 2024-12-02
         */
        virtual bool update() override;
    };

    /**
     * @brief 双色币坯饼
     * @author LiZiYang (1710087564@qq.com)
     * @date 2024-12-13
     */
    class FITKGeoCompOCCAPI FITKOCCModelTwoCoins : public Interface::FITKAbsGeoModelTwoCoins,
         public OCCShapeAgent
    {
    public:
        /**
         * @brief Construct a new FITKOCCModelUpDie object
         * @author LiZiYang (1710087564@qq.com)
         * @date 2024-12-13
         */
        explicit FITKOCCModelTwoCoins();
        /**
         * @brief Destroy the FITKOCCModelUpDie object
         * @author LiZiYang (1710087564@qq.com)
         * @date 2024-12-13
         */
        virtual ~FITKOCCModelTwoCoins() = default;
        /**
         * @brief 更新模型
         * @return true 更新成功
         * @return false 更新失败
         * @author LiZiYang (1710087564@qq.com)
         * @date 2024-12-13
         */
        virtual bool update() override;
    };

}

#endif // FITKOCCMODELMETALFORMING_H
